package fa7.socialcode.dao.hibernate;

import java.util.List;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.hibernate.SessionFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.orm.ObjectRetrievalFailureException;
import org.springframework.orm.hibernate3.HibernateTemplate;
import org.springframework.stereotype.Repository;

import fa7.socialcode.dao.DenunciaDao;
import fa7.socialcode.model.Denuncia;

@Repository(value = "denunciaDao")
public class DenunciaDaoHibernate implements DenunciaDao{

	HibernateTemplate hibernateTemplate;
	
	Log logger = LogFactory.getLog(AvaliacaoDaoHibernate.class);
	
	@Autowired
	  public DenunciaDaoHibernate(SessionFactory sessionFactory) {
	    this.hibernateTemplate = new HibernateTemplate(sessionFactory);
	  }
	
	@Override
	  public Denuncia findDenuncia(Long id) {
	    Denuncia denuncia = 
	      (Denuncia) hibernateTemplate.get(Denuncia.class, id);
	    if (denuncia == null) {
	        throw new ObjectRetrievalFailureException(Denuncia.class, id);
	    }
	    return denuncia;
	  }
	
	@Override
	  public List findDenuncias() {
	      return hibernateTemplate.find("from Denuncia");
	  }
	
	@Override
	  public void removeDenuncia(Long Id) {
	      hibernateTemplate.delete(findDenuncia(Id));

	  }
	
	@Override
	  public void removeDenuncia(Denuncia denuncia) {
	      hibernateTemplate.delete(findDenuncia(denuncia.getId()));

	  }
	
	@Override
	  public void saveDenuncia(Denuncia denuncia) {
	      hibernateTemplate.saveOrUpdate(denuncia);

	      if (logger.isDebugEnabled()) {
	          logger.debug("denunciaId set to: " + denuncia.getId());
	      }
	  }
	
	
}
